package es.tikitaka.dao;

import java.util.List;

import es.tikitaka.dictionary.AniosDic;
import es.tikitaka.domain.Temporada;
import es.tikitaka.domain.equipo.Equipo;

/**
 * 
 * @author Saúl Domínguez
 * @since 2010
 * @category PFC
 */

public interface EquipoService {

	/**
	 * Método para listar todos los equipos almacenados en el sistema
	 * 
	 * @return lista de todos los equipos
	 */
	List<Equipo> getList();

	/**
	 * Método para buscar los equipos coincidentes con los criterios de búsqueda
	 * 
	 * @param nombre
	 *            Nombre del equipo
	 * @param fundacion
	 *            Año de fundación
	 * @param temporada
	 *            Temporada para la que se tienen datos
	 * @param s
	 *            Consulta ha realizar
	 * @return lista de equipos coincidentes con los criterios de búsqueda
	 */
	List<Equipo> buscar(String nombre, AniosDic fundacion, Temporada temporada,
			StringBuffer s);

	/**
	 * Método para buscar los equipos activos coincidentes con el patrón de
	 * búsqueda
	 * 
	 * @param buscar
	 *            Cadena de texto a buscar
	 * @return lista de los equipos coincidentes
	 */
	List<Equipo> buscarActivos(String buscar);

	/**
	 * Método para buscar los equipos activos coincidentes con el patrón de
	 * búsqueda y que ademas no tenga asociada ya la temporada que se está
	 * pasando por parámetro
	 * 
	 * @param buscar
	 *            Cadena de texto a buscar
	 * @param temporada
	 *            Temporada asociada
	 * @return lista de los equipos coincidentes
	 */
	List<Equipo> buscarActivosSinTemporada(String buscar, Temporada temporada);

	/**
	 * Método que comprueba si el nombre del equipo existe ya en el sistema
	 * 
	 * @param nombre
	 *            Nombre del equipo a comprobar
	 * @return estado de la comprobación (true or false)
	 */
	boolean existeNombre(String nombre);

	/**
	 * 
	 * @param equipo
	 */
	Equipo merge(Equipo equipo);

	/**
	 * Método para eliminar del sistema un equipo existente
	 * 
	 * @param id
	 *            Id del equipo a eliminar
	 * @return estado de la operación (true or false)
	 */
	boolean delete(Integer id);

	/**
	 * Método para guardar un nuevo equipo o las modificaciones sufridas por un
	 * equipo ya existente
	 * 
	 * @param equipo
	 *            Equipo a guardar
	 * @return estado de la operación (true or false)
	 */
	boolean save(Equipo equipo);
}
